<!doctype html>
<html>
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>NODEJS</title>
<style type="text/css">
	* { color:#000; }
	body { background:#efefef;font-size:16px; }
	h1 { text-align:center; }
	p { line-height:30px;text-indent:30px; }
	.st { color:#f00;font-weight:bold; }
	pre { background:#eee;border:2px solid #3034eb;color:#444;font-size:larger;font-family:Arial;padding:10px; }
</style>
 </head>
 <body>
 <h2>express</h2>
	<p>路由</p>
	<pre>
		app.get("/",function(req,res){
			//返回内容
			res.send("get"+req.url);
		});
		//设置端口号
		app.lisent(8080);
	</pre>
	<p>返回页面</p>
	<pre>
		app.get('/',function(req,res){
		    //返回内容
		    //res.send('get'+req.url);
		    res.sendFile(__dirname+"/express.html");
		});

	</pre>
	<p>post方法</p>
	<pre>
		app.post("/post",function(req,res){
			res.send("post"+req.url);
		});
	</pre>
	<pre>
		//all 就是处理不管是任何方式发送的请求，*为任意路径
		app.all("*",function(req,res){
			res.send();
		});
	</pre>
	<p>请求的query</p>
	<pre>
		app.get("/query",function(req,res){
			console.log(req.query.user);
			res.send(req.query);//send里面可以是对象
		});
	</pre>
	<p>路径参数</p>
	<pre>
		app.get("/article/:id/:name",function(req,res){
			res.send(req.params);
		});
	</pre>

	<p>中间件</p>
	<p>1.每个中间件都可以控制流程是否执行</p>
	<p>2.每个中间件的req res都是用的同一个对象</p>
	<p>3.如果出错了，转交给错误处理中间件进行处理</p>
	<p>4.最大的特点是，一个中间件处理完成后，可以把响应的数据再传递给下一个中间件</p>
	<pre>
		//中央拨款100快
		app.use(function(red,res,next){
			req.money = 100;
			next();
		});
		
		//市政府
		app.use(function(req,res,next){
			req.money -= 20;
			next();
		});

		//村
		app.use(function(req,res,next){

			req.money -= 50;
			next();
		});

		//all 就是处理不管是任何方式发送的请求，*为任意路径
		app.all("*",function(req,res){
			//res.send(req.money);
		});
	</pre>

	<p>错误中间件第一个参数是err，其他都是一样的,next()里面没有参数，一般都是正常的！</p>
	<pre>
		app.use(function(err,req,res,next){

			console.log(err);
			res.end(err);
		});
	</pre>

	<p>模板引擎</p>
	<p>express 支持模板引擎</p>
	<p>ejs 模板,需要安装</p>

	<pre>
		//设置express的模板引擎                
		app.set("view engine", 'ejs');  
		//设置模板引擎的位置                     
		app.set("views", __dirname);

		//render 第一个参数为 模板
	    //第二个参数为执行数据
	    res.render('ejss',{
	        name:req.params.name,
	        age:req.params.age
	    });  
	</pre>

  <h1>nodejs之mongodb</h1>
	<h2>mongodb简介</h2>
	<p>MongoDB 是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。</p>
	<p>MongoDB 是一个介于关系数据库和非关系数据库之间的产品，是非关系数据库当中功能最丰富，最像关系数据库的。他支持的数据结构非常松散，是类似json的bson格式，因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大，其语法有点类似于面向对象的查询语言，几乎可以实现类似关系数据库单表查询的绝大部分功能，而且还支持对数据建立索引。</p>

	<h2>主要特点</h2>
	<p> MongoDB的提供了一个面向文档存储，操作起来比较简单和容易。</p>
    <p>你可以在MongoDB记录中设置任何属性的索引 (如：FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。</p>
    <p>你可以通过本地或者网络创建数据镜像，这使得MongoDB有更强的扩展性。</p>
    <p>如果负载的增加（需要更多的存储空间和更强的处理能力） ，它可以分布在计算机网络中的其他节点上这就是所谓的分片。</p>
    <p>Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记，可轻易查询文档中内嵌的对象及数组。</p>
    <p>MongoDb 使用update()命令可以实现替换完成的文档（数据）或者一些指定的数据字段 。</p>
    <p>Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。</p>
    <p>Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录，将key与value传给Reduce函数进行处理。</p>
    <p>Map函数和Reduce函数是使用Javascript编写的，并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。</p>
    <p>GridFS是MongoDB中的一个内置功能，可以用于存放大量小文件。</p>
    <p>MongoDB允许在服务端执行脚本，可以用Javascript编写某个函数，直接在服务端执行，也可以把函数的定义存储在服务端，下次直接调用即可。</p>
    <p>MongoDB支持各种编程语言:RUBY，PYTHON，JAVA，C++，PHP，C#等多种语言。</p>
    <p>MongoDB安装简单。</p>

	<h2>终端启动</h2>
	<p>首先，先启动mongod,输入命令: mongod --dbpath= "data的地址"</p>
	<p>然后，输入命令 mongo 启动mongo服务</p>
	<p>这个时候，就可以打开可视化操作数据库 Robomongo 了。</p>

	<h2>操作语句<h2>
	<p>创建数据库：use basename</p>
	<p>查看所有数据库 show dbs </p>
	<p>查看当前操作数据库：db</p>
	<p>删除数据库：db.dropDatabase()</p>
	<p>查看帮助API: db.worker.help()</p>
	<p>删除集合：db.collection.drop()</p>
	<p>创建集合：db.createCollection(name, options)</p>
	<p>创建集合并插入数据：db.collection_name.insert(document)</p>
	<p>查看当前数据库下有哪些集合：show collections</p>
	<p>插入文档：db.collection_name.save(document)</p>
	<p>删除文档：db.collection_name.remove(document)</p>
	<p>mongoDb更新文档</p>
	<p>update()方法用于更新文档已存的文档</p>
	<p>查询文档：db.collection_name.find(document)</p>


	

 </body>
</html>
